﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OracleClient;
using System.Text;
using CeA.Reports.Atendimento.DataAccess.Criteria;
using CeA.Reports.Atendimento.DataAccess.DTO;
using CeA.Reports.Atendimento.DataAccess.Helpers;
using IBatisNet.DataMapper;
using CeA.Reports.Atendimento.DataAccess.Model;

namespace CeA.Reports.Atendimento.DataAccess.DAO.Oracle {
    public class OracleRelatorioTempoAtendimento : RelatorioTempoAtendimento {
        public OracleRelatorioTempoAtendimento() {
            //OracleConnection m_connection = null;
            //m_connection = OracleDAOFactory.CreateConnection();
        }


        /// <summary>
        /// Lista o tempo médio de atendimento sem critério de busca.
        /// </summary>
        /// <returns></returns>
        public List<TempoAtendimento> FindTempoMedioAtendimento() {
            IList<TempoAtendimento> list = Mapper.Instance()
                    .QueryForList<TempoAtendimento>("tempoMedioAtendimento", new TempoAtendimentoFilter());
            
            return (List<TempoAtendimento>)list;
        }

        /// <summary>
        /// Lista o tempo médio de atendimento.
        /// </summary>
        public List<TempoAtendimento> FindTempoMedioAtendimentoBy(TempoAtendimentoFilter filter) {
            IList<TempoAtendimento> list = Mapper.Instance()
                    .QueryForList<TempoAtendimento>("tempoMedioAtendimento", filter);

            return (List<TempoAtendimento>)list;
        }

        /// <summary>
        /// Lista o tempo total de atendimento por RFS.
        /// </summary>
        public List<TempoAtendimento> FindTempoAtendimentoRfsBy(TempoAtendimentoFilter filter) {
            IList<TempoAtendimento> list = Mapper.Instance()
               .QueryForList<TempoAtendimento>("tempoAtendimentoRfs", filter);

            return (List<TempoAtendimento>)list;
        }


        /// <summary>
        /// Recupera o tempo total de atendimento Nacional.
        /// </summary>
        public TempoAtendimento GetTempoAtendimentoNacionalBy(TempoAtendimentoFilter filter) {
            TempoAtendimento row = Mapper.Instance()
               .QueryForObject<TempoAtendimento>("tempoNacionalAtendimento", filter);

            return row;
        }


        #region filtro Especialista
        /// <summary>
        /// Lista o tempo total de atendimento por Especialista.
        /// </summary>
        public List<TempoAtendimentoEspecialista> FindTempoAtendimentoEspecialista(TempoAtendimentoFilter filter)
        {
            IList<TempoAtendimentoEspecialista> list = Mapper.Instance()
               .QueryForList<TempoAtendimentoEspecialista>("tempoMedioAtendimentoEspecialista", filter);

            return (List<TempoAtendimentoEspecialista>)list;
        }

        #endregion

    }
}
